import re

'''
下载群文件中的 access_2021_08_30.log 文件，通过正则表达式统计访问日志中 http 返回码及对应的个数，
访问的 URL 以及个数
'''


def fast_count(keywords):
    """
    输入随机字符串、列表也行，统计每个元素出现的次数
    :param keywords: "ababbbb"
    :return:    'a':2, 'b':5
    """
    res = {}
    for i in keywords:
        res[i] = keywords.count(i)
    return res


def get_code_url(file):
    '''
    :param file:  日志的绝对路径
    '''
    with open(file, encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            # print(line)
            p_url = re.findall(r'[a-zA-Z]+://[^\s]*', line, re.S)  # 匹配url
            if len(p_url) > 0:  # 排除空url
                url_list.append(p_url)
            p_codes = re.findall(r'1.1"(.*?)"', line, re.S)  # 匹配返回码
            # print(p_codes)
            if len(p_codes) > 0:  # 排除空列表,正常列表[' 200  3290 ']
                for p_code in p_codes:
                    p_code = p_code.split(" ")[1]
                    code_list.append(p_code)


if __name__ == '__main__':
    url_list = []
    code_list = []
    file = r'./access_2021_08_30.log'
    get_code_url(file)
    print('url总共{}个'.format(len(url_list)))
    print(url_list)
    print("==============================")
    res = fast_count(code_list)
    print('返回码总共{}个,每个返回码出现的次数如下：'.format(len(code_list)))
    print(res)
    print(code_list)
# 完成的不错。不过只需完成题意即可
